//package ar.edu.utn.frba.tacs.warnes.aop;
//
//import ar.edu.utn.frba.tacs.warnes.Auto;
//import ar.edu.utn.frba.tacs.warnes.Reserva;
//import ar.edu.utn.frba.tacs.warnes.Venta;
//import ar.edu.utn.frba.tacs.warnes.excepciones.DominioWarnesException;
//import ar.edu.utn.frba.tacs.warnes.pedido.Pedido;
//import ar.edu.utn.frba.tacs.warnes.pieza.Pieza;
//import ar.edu.utn.frba.tacs.warnes.utils.ConstantesWarnes;
//import ar.edu.utn.frba.tacs.warnes.utils.ContenedorWarnes;
//
//public aspect Logger {
//
//	
//	
//	pointcut loguearNuevaPieza(Pieza pieza) : execution(Pieza.new(..)) && this(pieza);
//    after(Pieza pieza) returning : loguearNuevaPieza(pieza) { 
//        Utils.loguear("Se ha CREADO una nueva PIEZA llamada " + pieza.getDescripcion()); 
//    }
//
//	pointcut loguearNuevoAuto(Auto auto) : execution(Auto.new(..)) && this(auto);
//    after(Auto auto) returning : loguearNuevoAuto(auto) { 
//        Utils.loguear("Se ha CREADO un nuevo AUTO con patente " + auto.getPatente()); 
//    }
//
//	pointcut loguearNuevaReserva(Reserva reserva) : execution(Reserva.new(..)) && this(reserva);
//    after(Reserva reserva) returning : loguearNuevaReserva(reserva) { 
//        Utils.loguear("Se ha CREADO una nueva RESERVA de piezas con "+reserva.getPiezasReservadas().size()+ " items"); 
//    }
//    
//	pointcut loguearPiezaReservada(Pieza pieza) : execution(* Reserva.reservarPieza(..)) && args(pieza);
//    after(Pieza pieza) returning : loguearPiezaReservada(pieza) { 
//        Utils.loguear("La PIEZA "+pieza.getDescripcion()+" fue reservada con exito"); 
//    }
//
//	pointcut loguearNuevaVenta(Venta venta) : execution(Venta.new(..)) && this(venta);
//    after(Venta venta) returning : loguearNuevaVenta(venta) { 
//        Utils.loguear("Se ha CREADO una nueva VENTA de piezas con "+venta.getPiezasVendidas().size()+ " items"); 
//    }
//    
//    pointcut loguearPiezaVendida(Pieza pieza) : execution(void Venta.venderPieza(..)) && args(pieza);
//    after(Pieza pieza) returning : loguearPiezaVendida(pieza) { 
//    	Utils.loguear("La PIEZA "+pieza.getDescripcion()+" fue vendida con exito"); 
//    }
//    
//    pointcut loguearException(DominioWarnesException exc) : execution(DominioWarnesException.new(..)) && this(exc);
//    after(DominioWarnesException exc) returning : loguearException(exc) { 
//    	if(ConstantesWarnes.LogLevel.DEBUG.equals(ContenedorWarnes.getInstance().getLogLevel()))
//    		Utils.loguear(ConstantesWarnes.LogLevel.DEBUG, "<< ERROR >> "+exc.getMessage()); 
//    }
//    
//    pointcut loguearNuevoPedido(Pedido ped) : execution(Pedido.new(..)) && this(ped);
//    after(Pedido ped) returning : loguearNuevoPedido(ped) { 
//    	Utils.loguear("Se ha CREADO un nuevo PEDIDO con "+ped.getPiezas().size()+" piezas.");
//    	Utils.logEnArchivo("Se ha CREADO un nuevo PEDIDO con "+ped.getPiezas().size()+" piezas.", ped.getId()); 
//    }    
//    
//    pointcut loguearCancelacionPedido() : execution(* Pedido.cancelar(..)) ;
//    before() : loguearCancelacionPedido() { 
//    	Utils.loguear("Se ha CANCELADO un PEDIDO que tenia "+((Pedido)thisJoinPoint.getTarget()).getPiezas().size()+" piezas."); 
//    	Utils.logEnArchivo("Se ha CANCELADO un PEDIDO que tenia "+((Pedido)thisJoinPoint.getTarget()).getPiezas().size()+" piezas.", ((Pedido)thisJoinPoint.getTarget()).getId());
//    }
//    
//    pointcut loguearEfectivizacionPedido() : execution(* Pedido.efectivizar());
//    after() returning : loguearEfectivizacionPedido() { 
//       	Utils.loguear("Se ha EFECTIVIZADO un PEDIDO que tenia "+((Pedido)thisJoinPoint.getTarget()).getPiezas().size()+" piezas."); 
//       	Utils.logEnArchivo("Se ha EFECTIVIZADO un PEDIDO que tenia "+((Pedido)thisJoinPoint.getTarget()).getPiezas().size()+" piezas.", ((Pedido)thisJoinPoint.getTarget()).getId());
//   }
//    
//    pointcut loguearAgregarPiezaAPedido(Pieza pieza) : execution(* Pedido.agregarPieza(..)) && args(pieza);
//    after(Pieza pieza) returning : loguearAgregarPiezaAPedido(pieza) {
//    	Utils.loguear("La PIEZA "+pieza.getDescripcion()+" se agrego al PEDIDO."); 
//    }  
//}
